home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_300 / 310_02 / parser.h < prev    next >
C/C++ Source or Header  |  1990-04-18  |  3KB  |  122 lines

  1. /*
  2.     Little Smalltalk
  3.         definitions used by parser
  4. */
  5.  
  6.  
  7. enum vartypes {instvar, argvar, tempvar};
  8.  
  9. struct varstruct {
  10.         struct varstruct *nextvar;
  11.         enum vartypes vtype;
  12.         char *text;
  13.         short position;
  14.         };
  15.  
  16. enum objtypes {classobj, varobj, instvarobj, contvarobj, 
  17.     litobj, pseuobj, primobj, exprobj, blockobj};
  18.  
  19. struct objstruct {
  20.         enum objtypes objtype;
  21.         union {
  22.         char *varname;
  23.         int varoffset;
  24.                 struct litstruct *litinfo;
  25.                 enum   pseuvars pseuinfo;
  26.         struct primstruct *priminfo;
  27.                 struct statestruct *stateinfo;
  28.                 struct blockstruct *blockinfo;
  29.              } ee;
  30.         };
  31.  
  32. struct blockstruct {
  33.     int arglocation;
  34.     int numargs;
  35.     struct statestruct *bstates;
  36.     };
  37.  
  38. enum littypes {numlit, fnumlit, charlit, strlit, symlit, arlit, bytelit};
  39.  
  40. struct litstruct {
  41.         enum littypes littype;
  42.         union {
  43.                 int litint;
  44.                 char litchar;
  45.                 char *litstr;
  46.                 char *litsym;
  47.                 struct litlist *litarry;
  48.              } ll;
  49.         };
  50.  
  51. struct litlist {
  52.         struct litstruct *litele;
  53.         struct litlist *nextlit;
  54.         int    litposition;
  55.         };
  56.  
  57. struct primstruct {
  58.     int primnumber;
  59.     struct primlist *plist;
  60.     } ;
  61.  
  62. struct primlist {
  63.     struct primlist *nextprim;
  64.     struct objstruct *pobject;
  65.     };
  66.  
  67. enum cmdtypes {reccmd, uncmd, bincmd, keycmd, semistart, semiend};
  68.  
  69. struct exprstruct {
  70.         enum   cmdtypes cmdtype;
  71.         char   *cmdname;
  72.         struct exprstruct *receiver;
  73.         union {
  74.                 struct exprstruct *argument;
  75.                 struct keylist *keys;
  76.                 struct objstruct *recobj;
  77.               } cc;
  78.         struct exprstruct *nextcmd;
  79.         };
  80.  
  81. enum statetypes {blkupar, upar, asgn, iasgn, casgn, expr};
  82.  
  83. struct statestruct {
  84.         enum statetypes statetype;
  85.         struct statestruct *nextstate;
  86.         union {
  87.                 struct varstruct *variable;
  88.         int varpos;
  89.               } mm;
  90.         union {
  91.                 struct statestruct *stateexpr;
  92.                 struct exprstruct *cmd;
  93.               } nn;
  94.         };
  95.  
  96. struct keylist {
  97.         char   *keyword;
  98.         struct exprstruct *arg;
  99.         struct keylist *nextkey;
  100.         };
  101.  
  102. struct methodstruct {
  103.     struct exprstruct *pattern;
  104.     int    numtempvars;
  105.         struct statestruct *states;
  106.         struct methodstruct *nextmethod;
  107.         };
  108.  
  109. struct classstruct {
  110.         char *name;
  111.         char *super;
  112.         };
  113.  
  114. # define structalloc(type) (struct type *) alloc(sizeof (struct type ))
  115.  
  116. extern struct varstruct *instvars;
  117. extern struct varstruct *contextvars;
  118.  
  119. # define addinst(x) (instvars = addvlist(mkvar(x, instvar), instvars))
  120.  
  121. extern char *walloc();
  122.